[中級編]LLMへ至る道~Seq2Seqってやつがいるらしい~[14日目]
みなさんこんにちは!クルトンです。
前日のブログは要約処理についてでした。要約処理には2種類の方法があり、その片方である抽出型の要約については実際にコードもご説明しました。
本日は、Seq2Seqモデルについてのご紹介です。LLMで使われているモデルの中身でも使われている重要な構造を持っているモデルですので見ていきましょう!
Seq2Seqって?
RNNやLSTMを複数使っているモデルです。
RNNについてお忘れの方はこちらをご参照ください。
LSTMについてお忘れの方はこちらをご覧ください。
複数のLSTMを使っているというと、ELMoモデルを思い出しますね。Seq2Seqは構造として以下の特徴を持っています。
- Encoderと呼ばれる構造がある
- Decoderと呼ばれる構造がある
上記の2つは「なんだ?」となりそうですが、まずはSeq2Seqがどういう事に使われるかを知るとイメージしやすいかと思います。
下のイメージをご覧ください。
実はみなさんよく見た事がある内容ではないでしょうか。こちらは機械翻訳というものです。
処理の流れを日本語にしてみます。
- 日本語を入力
- Encoderに日本語が渡され、分散表現を獲得
- 分散表現を入力としてDecoderに渡す
- Decoderが分散表現から英語にする
つまり、EncoderとDecoderをセットにして使う事で日本語から英語に変えています。
ここでSeq2Seqを略さずに書くと、 Sequence-to-Sequenceです。Sequenceというのは系列データの事を表しています。
系列データというのは時間や順序があるデータの事を意味し、自然言語で書かれる文章は順序(主語や助詞、述語など)があるので系列データの一つです。
系列データを別の系列データに変換する事を系列変換と言い、Sequence-to-Sequenceと言います。
「系列データを別の系列データに変換する」とだけ言われるとわかりづらいかもしれませんが、上の図のような事をしているのがSeq2Seqです。
なお、自然言語から別の自然言語への変換はtext-to-textとも言います。
モデルの学習方法について確認
以下の図はPytorchの公式チュートリアルから引用させていただきました。
フランス語から英語を翻訳するというモデルの、学習時のイメージ図です。
図の処理内容は以下の順番で行なわれています。
- Encoderへ「le chat est noir」というフランス語を入力する
- フランス語をEncoderがベクトル(分散表現)にする
- Encoderを使った分散表現と翻訳した結果の英語をDecoderへ入力する
- Decoderに英語を出力させる
つまりは、翻訳する時にペアとなる文章を使って、学習している様子になります。
ここで注目してほしい箇所がもう一つあります。EOSやSOSという語です。 これらは文章の始まり(SOS)や文章の終わり(EOS)を表す言葉です。 それぞれstart-of-sentenceとend-of-sentenceの略語です。
なぜこれらが必要かというとEncoderからDecoderへベクトルを渡して入力する際に、Encoderの出力したベクトルの大きさとDecoderの入力時のベクトルの大きさを揃える必要があるためです。
そのため5つの単語をEncoder-Decoder間で受け渡しする場合で、Encoderへ入力するのが3単語である場合、文章の終わりは5単語目ではないと明示的にしています。
ちなみに学習をより良く進める方法として、翻訳文とDecoderの出力結果を比較しています。 損失関数としては2日目でご紹介した交差エントロピー誤差を使います。(PytorchだとNLLLOSSというクラスを呼び出します。)
Seq2Seqの課題
固定長のベクトル、つまりベクトルの大きさが決まっているので課題があります。
というのも、決まった大きさのみを取り扱うのでその範囲内での文脈の理解しかできないという事なのです。
以下の図をご覧ください。
学生である佐藤さんと田中さんが、数学と国語の100点満点のテストでとったそれぞれの点数が書かれています。
この図からどちらの方が点数を獲得しているかというと、佐藤さんです。点数差にして25点です。
しかし、他の科目のテストで田中さんが佐藤さんよりも多くの25点以上の差をつけて点数を獲得すると、実は田中さんの方がテストの総合点数が高いという結果になります。
固定長のベクトルというのは図でいうところの、数学や国語の軸だと捉えてください。2軸の中で解釈すると、間違ってしまう可能性があるという話です。
終わりに
本日は、Seq2Seqモデルについてご紹介してきました。 系列変換ができることで、機械翻訳なども可能となっていましたね。また、今までご紹介してきたRNNやLSTMをEncoderとDecoderという2つの役割で使っているものでした。
明日は、ついにLLMの中で使われているモデルについてご紹介いたします!
本日はここまで。それでは、明日もよければご覧ください!
参考文献
Seq2Seqに関する論文です。
こちらもSeq2Seqに関する論文です。